//
// Created by lovep on 2025/4/11.
//

#ifndef QUEUE_H
#define QUEUE_H

#include <defination.h>

typedef struct QNode {
    // 结点类型
    QElemType data;
    struct QNode *next;
} QNode, *QueuePtr;

typedef struct {
    // 链队列类型
    QueuePtr front; // 队首指针
    QueuePtr rear; // 队尾指针
    int length;  // 队列长度
} LinkQueue;

Status LinkQueue_Init(LinkQueue &Q); //创建一个空的链队列Q
Status LinkQueue_En(LinkQueue &Q,QElemType e); //在链队列Q中插入新的元素e，使其成为新的队尾元素
Status LinkQueue_De(LinkQueue &Q,QElemType &e); //在链队列Q中删除队首元素，并用e返回其值
int LinkQueue_Length(LinkQueue Q); //返回当前链队列中数据元素的个数
void LinkQueue_Destroy(LinkQueue &Q); //销毁链队列Q
void LinkQueue_Clear(LinkQueue &Q); //清空链队列Q
Status LinkQueue_Empty(LinkQueue Q); //判断链队列是否为空，若空返回TRUE，否则返回FALSE
Status LinkQueue_Display(LinkQueue Q); //从队首到队尾，依次输出链队列中各数据元素的值


#endif //QUEUE_H
